#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef tuple<int,int,int> tpi;
const int V=1e6,P=998244353;
inline int add(int x,int y){
  int s=x+y; if(s>=P)s-=P; return s;
}
inline int qpow(int a,int b){
  int r=1;
  while(b){
    if(b&1)r=1ll*r*a%P;
    a=1ll*a*a%P,b>>=1;
  }
  return r;
}
int main(){
  freopen("traffic.in","r",stdin);
  freopen("traffic.out","w",stdout);
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  int n; ll w=1; cin>>n;
  vector<tpi> a(n);
  bool A=true;
  for(auto &l:a){
    int x,y,g; cin>>x>>y>>g;
    l=make_tuple(x,y,g);
    A&=y+g==get<1>(a[0])+get<2>(a[0]);
    if(w<=V)w=w/__gcd(w,(ll)y+g)*(y+g);
  }
  vector<int> c(n+1);
  if(w<=V){
    for(int i=0;i<w;i++){
      bool f=true;
      for(int j=0;j<n;j++)
        if((i+get<0>(a[j]))%(get<1>(a[j])+get<2>(a[j]))<get<1>(a[j])){
          c[j]++,f=false; break;
        }
      if(f)c[n]++;
    }
  }
  else{
    c[n]=1;
    for(int i=0;i<n;i++){
      c[i]=1ll*c[n]*get<2>(a[i])%P*qpow(get<1>(a[i])+get<2>(a[i]),P-2)%P;
      c[n]=add(c[n],P-c[i]);
    }
  }
  int d=qpow(accumulate(c.begin(),c.end(),0,add),P-2);
  for(int i:c)cout<<1ll*i*d%P<<'\n';
  return 0;
}